{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>订单号</th>\n",
       "      <th>产品码</th>\n",
       "      <th>消费日期</th>\n",
       "      <th>产品说明</th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "      <th>城市</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536374</td>\n",
       "      <td>21258</td>\n",
       "      <td>6/1/2020 9:09</td>\n",
       "      <td>五彩玫瑰五支装</td>\n",
       "      <td>32</td>\n",
       "      <td>10.95</td>\n",
       "      <td>15100</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536376</td>\n",
       "      <td>22114</td>\n",
       "      <td>6/1/2020 9:32</td>\n",
       "      <td>茉莉花白色25枝</td>\n",
       "      <td>48</td>\n",
       "      <td>3.45</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536376</td>\n",
       "      <td>21733</td>\n",
       "      <td>6/1/2020 9:32</td>\n",
       "      <td>教师节向日葵3枝尤加利5枝</td>\n",
       "      <td>64</td>\n",
       "      <td>2.55</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536378</td>\n",
       "      <td>22386</td>\n",
       "      <td>6/1/2020 9:37</td>\n",
       "      <td>百合粉色10花苞</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536378</td>\n",
       "      <td>85099C</td>\n",
       "      <td>6/1/2020 9:37</td>\n",
       "      <td>橙黄香槟色康乃馨</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      订单号     产品码           消费日期           产品说明  数量     单价    用户码  城市\n",
       "0  536374   21258  6/1/2020 9:09        五彩玫瑰五支装  32  10.95  15100  北京\n",
       "1  536376   22114  6/1/2020 9:32       茉莉花白色25枝  48   3.45  15291  上海\n",
       "2  536376   21733  6/1/2020 9:32  教师节向日葵3枝尤加利5枝  64   2.55  15291  上海\n",
       "3  536378   22386  6/1/2020 9:37       百合粉色10花苞  10   1.95  14688  北京\n",
       "4  536378  85099C  6/1/2020 9:37       橙黄香槟色康乃馨  10   1.95  14688  北京"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd #导入Pandas\n",
    "df_sales = pd.read_csv('易速鲜花订单记录.csv') #载入数据\n",
    "df_sales.head() #显示头几行数据 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt #导入Matplotlib的pyplot模块\n",
    "#构建月度的订单数的DataFrame\n",
    "df_sales['消费日期'] = pd.to_datetime(df_sales['消费日期']) #转化日期格式\n",
    "df_orders_monthly = df_sales.set_index('消费日期')['订单号'].resample('M').nunique()\n",
    "#设定绘图的画布\n",
    "ax = pd.DataFrame(df_orders_monthly.values).plot(grid=True,figsize=(12,6),legend=False)\n",
    "ax.set_xlabel('月份') # X轴label\n",
    "ax.set_ylabel('订单数') # Y轴Label\n",
    "ax.set_title('月度订单数') # 图题\n",
    "#设定X轴月份显示格式\n",
    "plt.xticks(\n",
    "    range(len(df_orders_monthly.index)), \n",
    "    [x.strftime('%m.%Y') for x in df_orders_monthly.index], \n",
    "    rotation=45)\n",
    "plt.show() # 绘图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据清洗"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_sales = df_sales.drop_duplicates() #删除重复的数据行"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "订单号     0\n",
       "产品码     0\n",
       "消费日期    0\n",
       "产品说明    0\n",
       "数量      0\n",
       "单价      0\n",
       "用户码     0\n",
       "城市      0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales.isna().sum() # NaN出现的次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>85920.000000</td>\n",
       "      <td>85920.000000</td>\n",
       "      <td>85920.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>10.115747</td>\n",
       "      <td>3.599711</td>\n",
       "      <td>15338.080389</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>49.114285</td>\n",
       "      <td>134.410498</td>\n",
       "      <td>391.309086</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-9360.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14681.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.250000</td>\n",
       "      <td>15022.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>4.000000</td>\n",
       "      <td>1.950000</td>\n",
       "      <td>15334.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>12.000000</td>\n",
       "      <td>3.750000</td>\n",
       "      <td>15673.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>3114.000000</td>\n",
       "      <td>38970.000000</td>\n",
       "      <td>16019.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 数量            单价           用户码\n",
       "count  85920.000000  85920.000000  85920.000000\n",
       "mean      10.115747      3.599711  15338.080389\n",
       "std       49.114285    134.410498    391.309086\n",
       "min    -9360.000000      0.000000  14681.000000\n",
       "25%        2.000000      1.250000  15022.000000\n",
       "50%        4.000000      1.950000  15334.000000\n",
       "75%       12.000000      3.750000  15673.000000\n",
       "max     3114.000000  38970.000000  16019.000000"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales.describe() #df_sales的统计信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_sales = df_sales.loc[df_sales['数量'] > 0] #清洗掉数量小于等于0的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>84112.000000</td>\n",
       "      <td>84112.000000</td>\n",
       "      <td>84112.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>10.760236</td>\n",
       "      <td>3.005032</td>\n",
       "      <td>15337.732963</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>34.018906</td>\n",
       "      <td>15.365085</td>\n",
       "      <td>392.074855</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>14681.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>2.000000</td>\n",
       "      <td>1.250000</td>\n",
       "      <td>15021.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>5.000000</td>\n",
       "      <td>1.950000</td>\n",
       "      <td>15333.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>12.000000</td>\n",
       "      <td>3.750000</td>\n",
       "      <td>15674.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>3114.000000</td>\n",
       "      <td>3155.950000</td>\n",
       "      <td>16019.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 数量            单价           用户码\n",
       "count  84112.000000  84112.000000  84112.000000\n",
       "mean      10.760236      3.005032  15337.732963\n",
       "std       34.018906     15.365085    392.074855\n",
       "min        1.000000      0.000000  14681.000000\n",
       "25%        2.000000      1.250000  15021.000000\n",
       "50%        5.000000      1.950000  15333.000000\n",
       "75%       12.000000      3.750000  15674.000000\n",
       "max     3114.000000   3155.950000  16019.000000"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales.describe() #df_sales的统计信息"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>订单号</th>\n",
       "      <th>产品码</th>\n",
       "      <th>消费日期</th>\n",
       "      <th>产品说明</th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "      <th>城市</th>\n",
       "      <th>总价</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536374</td>\n",
       "      <td>21258</td>\n",
       "      <td>2020-06-01 09:09:00</td>\n",
       "      <td>五彩玫瑰五支装</td>\n",
       "      <td>32</td>\n",
       "      <td>10.95</td>\n",
       "      <td>15100</td>\n",
       "      <td>北京</td>\n",
       "      <td>350.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536376</td>\n",
       "      <td>22114</td>\n",
       "      <td>2020-06-01 09:32:00</td>\n",
       "      <td>茉莉花白色25枝</td>\n",
       "      <td>48</td>\n",
       "      <td>3.45</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "      <td>165.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536376</td>\n",
       "      <td>21733</td>\n",
       "      <td>2020-06-01 09:32:00</td>\n",
       "      <td>教师节向日葵3枝尤加利5枝</td>\n",
       "      <td>64</td>\n",
       "      <td>2.55</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "      <td>163.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536378</td>\n",
       "      <td>22386</td>\n",
       "      <td>2020-06-01 09:37:00</td>\n",
       "      <td>百合粉色10花苞</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "      <td>19.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536378</td>\n",
       "      <td>85099C</td>\n",
       "      <td>2020-06-01 09:37:00</td>\n",
       "      <td>橙黄香槟色康乃馨</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "      <td>19.5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      订单号     产品码                消费日期           产品说明  数量     单价    用户码  城市  \\\n",
       "0  536374   21258 2020-06-01 09:09:00        五彩玫瑰五支装  32  10.95  15100  北京   \n",
       "1  536376   22114 2020-06-01 09:32:00       茉莉花白色25枝  48   3.45  15291  上海   \n",
       "2  536376   21733 2020-06-01 09:32:00  教师节向日葵3枝尤加利5枝  64   2.55  15291  上海   \n",
       "3  536378   22386 2020-06-01 09:37:00       百合粉色10花苞  10   1.95  14688  北京   \n",
       "4  536378  85099C 2020-06-01 09:37:00       橙黄香槟色康乃馨  10   1.95  14688  北京   \n",
       "\n",
       "      总价  \n",
       "0  350.4  \n",
       "1  165.6  \n",
       "2  163.2  \n",
       "3   19.5  \n",
       "4   19.5  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales['总价'] = df_sales['数量'] * df_sales['单价'] #计算每单的总价\n",
    "df_sales.head() #显示头几行数据  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 构建User用户表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>975</th>\n",
       "      <td>16015</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>976</th>\n",
       "      <td>16016</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>977</th>\n",
       "      <td>16017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>978</th>\n",
       "      <td>16018</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>979</th>\n",
       "      <td>16019</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>980 rows × 1 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       用户码\n",
       "0    14681\n",
       "1    14682\n",
       "2    14684\n",
       "3    14687\n",
       "4    14688\n",
       "..     ...\n",
       "975  16015\n",
       "976  16016\n",
       "977  16017\n",
       "978  16018\n",
       "979  16019\n",
       "\n",
       "[980 rows x 1 columns]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user = pd.DataFrame(df_sales['用户码'].unique()) #生成以用户码为主键的结构df_user\n",
    "df_user.columns = ['用户码'] #设定字段名\n",
    "df_user = df_user.sort_values(by='用户码',ascending=True).reset_index(drop=True) #按用户码排序\n",
    "df_user #显示df_user"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 求R值: 新进度，代表自用户上次消费以来的天数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值\n",
       "0  14681   70\n",
       "1  14682  187\n",
       "2  14684   25\n",
       "3  14687  106\n",
       "4  14688    7"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales['消费日期'] = pd.to_datetime(df_sales['消费日期']) #转化日期格式\n",
    "df_recent_buy = df_sales.groupby('用户码').消费日期.max().reset_index() #构建消费日期信息\n",
    "df_recent_buy.columns = ['用户码','最近日期'] #设定字段名\n",
    "df_recent_buy['R值'] = (df_recent_buy['最近日期'].max() - df_recent_buy['最近日期']).dt.days #计算最新日期与上次消费日期的天数\n",
    "df_user = pd.merge(df_user, df_recent_buy[['用户码','R值']], on='用户码') #把上次消费距最新日期的天数（R值）合并至df_user结构\n",
    "df_user.head() #显示df_user头几行数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 求F值: 消费频率，代表用户是否频繁使用服务"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值\n",
       "0  14681   70    7\n",
       "1  14682  187    2\n",
       "2  14684   25  390\n",
       "3  14687  106   15\n",
       "4  14688    7  324"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_frequency = df_sales.groupby('用户码').消费日期.count().reset_index() #计算每个用户消费次数，构建df_frequency对象\n",
    "df_frequency.columns = ['用户码','F值'] #设定字段名称\n",
    "df_user = pd.merge(df_user, df_frequency, on='用户码') #把消费频率整合至df_user结构\n",
    "df_user.head() #显示头几行数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 求M值: 消费金额，代表用户在一段时间内消费的总金额"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "      <th>M值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>498.95</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "      <td>52.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "      <td>1201.51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "      <td>628.38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "      <td>5579.10</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值       M值\n",
       "0  14681   70    7   498.95\n",
       "1  14682  187    2    52.00\n",
       "2  14684   25  390  1201.51\n",
       "3  14687  106   15   628.38\n",
       "4  14688    7  324  5579.10"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_revenue = df_sales.groupby('用户码').总价.sum().reset_index() #根据消费总额，构建df_revenue对象\n",
    "df_revenue.columns = ['用户码','M值'] #设定字段名称\n",
    "df_user = pd.merge(df_user, df_revenue, on='用户码') #把消费金额整合至df_user结构\n",
    "df_user.head() #显示头几行数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 显示R、F、M值的分布情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x11d4ed208>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_user['R值'].plot(kind='hist', bins=20, title = '新进度分布直方图') #R值直方图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x11e356198>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_user.query('F值 < 800')['F值'].plot(kind='hist', bins=50, title = '消费频率分布直方图') #F值直方图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x11e39bb38>"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df_user.query('M值 < 20000')['M值'].plot(kind='hist', bins=50, title = '消费金额分布直方图') #M值直方图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 显示手肘图辅助确定K值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 手肘法是通过聚类算法的损失值曲线来直观确定簇的数量"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 损失值曲线，就是以图像的方法绘出，取每一个 K 值时，各个数据点距离质心的平均距离"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.cluster import KMeans #导入KMeans模块\n",
    "def show_elbow(df): #定义手肘函数\n",
    "    distance_list = [] #聚质心的距离（损失）\n",
    "    K = range(1,9) #K值范围\n",
    "    for k in K:\n",
    "        kmeans = KMeans(n_clusters=k, max_iter=100) #创建KMeans模型\n",
    "        kmeans = kmeans.fit(df) #拟合模型\n",
    "        distance_list.append(kmeans.inertia_) #创建每个K值的损失\n",
    "    plt.plot(K, distance_list, 'bx-') #绘图\n",
    "    plt.xlabel('k') #X轴\n",
    "    plt.ylabel('距离均方误差') #Y轴\n",
    "    plt.title('k值手肘图') #标题"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_elbow(df_user[['R值']]) #显示R值聚类K值手肘图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_elbow(df_user[['F值']]) #显示F值聚类K值手肘图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEWCAYAAACJ0YulAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAH2NJREFUeJzt3XmUVdWZxuHfxyQoAgrVCIJikIQYjKCFktaooCgCQQxKcAIHqhwSTSSJHdeKQ7TtZdud1jaDaQQCxIiWaBQUnEKRhI4oBRGjoU0Qo0yRcgARVKav/9i3BoqaqXP3Hd5nrbu4w6HqJSvWW/vsffYxd0dERASgVewAIiKSOVQKIiJSSaUgIiKVVAoiIlJJpSAiIpVUCiIiUkmlIJJiZn83szNj5xCJqU3sACKZzMzOBb5fy0cLgAeBh2r5bKO7X2BmTwJda/n8fOBqoLYCutPdFzY3r8j+UimI1K8HcJu7v1Dxhpl1BH4KHAgsdvcfVv8LZjY39XSnu59S47P/BNoD/YHT3X1Xtc9GA90T+VeINJJOH4nUwsy+aGZvAYfEziKSTioFkRrM7HjgWeA64MPIcUTSKitLwcxmmNkmM3utEcfeY2avpB5/NbPN6cgoWeurwDxgors/FTuMSLplZSkAM4ERjTnQ3W9w94HuPhD4CfB4ksEk610N/NHdF8cOIhJDVpaCu/8e+KD6e2bW18yeMbPlZvYHM+tfy1+9EJiTlpCSra4GjjCze2IHEYkhK0uhDlOB69z9BOB7wM+rf2hmRwJHAYsiZJPssZUwCj3VzO6KHUYk3XJiSWpqieA/A4+aWcXbB9Q4bAIw1913pzObZB9332xmw4FSoCdhhCmSF3KiFAgjns2peYO6TAC+maY8koXcvU+15x8Ax5nZ1fESiaRfTpSCu39kZm+Z2QXu/qiF4cKX3X0lQGp+4RDgxahBJVv92MyqL01tDbyZen6pmZ1S4/iKq5iPNbPFNT7rS7jwDeC3Zlb91oddgR+3QF6RZrNsvB2nmc0BTge6Ae8CtxLmCu4nXIHaFnjY3W9PHX8b0N7dfxAjr4hItsjKUhARkWTk0uojERHZT1k3p9CtWzfv06dP7BgiIlll+fLl77l7QUPHZV0p9OnTh7KystgxRESyipm93ZjjdPpIREQqqRRERKSSSkFERCqpFEREpJJKQUREKuV8Kdx9N5SW7v1eaWl4X0RE9pbzpTB4MIwfX1UMpaXh9eDBcXOJiGSirLtOoamGDoWSEhg3Dvr1gzVrwuuhQ2MnExHJPDk/UoBQAGefDS+/DKedpkIQEalLXpRCaSm88AJ06gTz5u07xyAiIkHOl0LFHEJJCUyZAjt3wvnnqxhERGqT86WwbFnVHMIVV0CrVjBiRHhfRET2lnX3UygsLPT92RBv9GhYsQLefhvatm3BYCIiGczMlrt7YUPH5fxIoabiYti4EZ5+OnYSEZHMk3elMHIk9OwJDzwQO4mISObJu1Jo0ybMLSxcCO+8EzuNiEhmybtSALjyyvDn9Olxc4iIZJq8LIU+feCss2DGDNi1K3YaEZHMkZelAGHCed06eOaZ2ElERDJH3pbC174G3btrwllEpLrESsHMeptZqZn9xcxeN7Nv13KMmdl9ZrbazF41s+OTylNT27Zw+eXw1FOwfn26vquISGZLcqSwC/iuux8DDAG+aWbH1DjmHKBf6lEM3J9gnn1Mngx79oS5BRERSbAU3H2ju69IPd8KrAIOr3HYucBsD5YCXcysR1KZaurbF848M6xC2r07Xd9VRCRzpWVOwcz6AIOAl2p8dDiwttrrdexbHJhZsZmVmVlZeXl5i2YrKgpbXjz/fIt+WRGRrJR4KZhZR+Ax4Dvu/lFzvoa7T3X3QncvLCgoaNF8Y8dCQYEmnEVEIOFSMLO2hEL4tbs/Xssh64He1V73Sr2XNu3awaRJ4T4LGzem8zuLiGSeJFcfGTAdWOXu/1XHYfOAialVSEOALe6e9h/NRUXhIraZM9P9nUVEMkuSI4WTgUuBYWb2Suox0syuNrOrU8csANYAq4EHgGsTzFOnz38eTj8dpk0Lq5FERPJVm6S+sLsvAayBYxz4ZlIZmqKoCC6+GBYtCiuSRETyUd5e0VzT178Ohx4KU6fGTiIiEo9KIaV9e5g4EZ54AjZtip1GRCQOlUI1RUWwcyfMmhU7iYhIHCqFao45Bk45JVyzkGW3rhYRaREqhRqKiuBvf4Pf/S52EhGR9FMp1HDBBdCliyacRSQ/qRRq6NABLr0UHnsM3n8/dhoRkfRSKdSiqAh27IDZs2MnERFJL5VCLY49FoYM0YSziOQflUIdiopg1Sr43/+NnUREJH1UCnX4xjfg4IM14Swi+UWlUIeDDoJLLoFHH4UPP4ydRkQkPVQK9Sgqgk8/hQcfjJ1ERCQ9VAr1GDQICgs14Swi+UOl0ICiIvjzn+GlmneXFhHJQSqFBlx4YZhf0ISziOQDlUIDDj4YLroIHnkEtmyJnUZEJFkqhUYoKoLt2+Ghh2InERFJlkqhEQoLYeDAcApJE84ikstUCo1gFkYLr7wCy5fHTiMikhyVQiNdfHHYQVUTziKSy1QKjdS5M0yYAHPmwNatsdOIiCRDpdAERUXw8cfw8MOxk4iIJEOl0ARDhsCAATqFJCK5S6XQBGZQXAxlZfCnP8VOIyLS8lQKTXTJJdC+fdgPSUQk16gUmuiQQ+CCC+DXv4Zt22KnERFpWSqFZigqgo8+gpKS2ElERFqWSqEZTjkF+vfXhLOI5B6VQjNUTDgvXRq21RYRyRUqhWa69FJo104TziKSW1QKzdStG4wbB7/6FXzySew0IiItQ6WwH4qKYPNmmDs3dhIRkZahUtgPp58ORx+tCWcRyR0qhf1QMeG8ZAmsWhU7jYjI/lMp7KdJk6BtW004i0huUCnsp3/6Jxg7FmbPhk8/jZ1GRGT/qBRaQHExvP8+/OY3sZOIiOyfxErBzGaY2SYze62Oz083sy1m9krqcUtSWZI2bBgcdZQmnEUk+yU5UpgJjGjgmD+4+8DU4/YEsySqVauwPHXxYvjrX2OnERFpvsRKwd1/D3yQ1NfPNJddBq1bw7RpsZOIiDRf7DmFr5jZSjNbaGZfqusgMys2szIzKysvL09nvkbr0QPGjIGZM2HHjthpRESaJ2YprACOdPfjgJ8AT9R1oLtPdfdCdy8sKChIW8CmKi6G8nJ48snYSUREmidaKbj7R+7+cer5AqCtmXWLlaclDB8ORxyhCWcRyV7RSsHMDjMzSz0/MZXl/Vh5WkLr1jB5MrzwAqxZEzuNiEjTJbkkdQ7wIvAFM1tnZlea2dVmdnXqkPOB18xsJXAfMMHdPak86XL55WE1kiacRSQbWbb9HC4sLPSysrLYMeo1Zgy8/DKsXRu2wBARic3Mlrt7YUPHxV59lJOKi+Hdd+Gpp2InERFpGpVCAkaMgMMP14SziGQflUIC2rSBK6+EZ5+Ft9+OnUZEpPFUCgm54orw5/TpcXOIiDSFSiEhRx4ZTiNNnw67dsVOIyLSOCqFBBUXw4YNsHBh7CQiIo2jUkjQqFFw2GGacBaR7KFSSFDbtmFuYcECWLcudhoRkYapFBI2eTLs2QMzZsROIiLSMJVCwo46KmyUN20a7N4dO42ISP1UCmlQXBy2vHjuudhJRETqp1JIgzFjoKBAE84ikvlUCmnQrl3YPXX+fNi4MXYaEZG6qRTSZPLkMKfwy1/GTiIiUjeVQpr06wdDh4YJ5z17YqcREamdSiGNiovhrbfgt7+NnUREpHZtGnOQmd3SwCGb3P0XLZAnp513HnTtGiachw+PnUZEZF+NKgVgCDABsDo+nwWoFBpwwAEwaRLcd1+4CU/37rETiYjsrbGnj3a7+0fuvqW2B5Bd9/SMqKgo7Jo6a1bsJCIi+2psKTT0Q1+l0Ej9+8NXvwoPPABZdntsEckDjS2FtmbWqY5HZ6B1kiFzTXExrF4NixfHTiIisrfGziksBb5Tz+e6Y0ATjBsH110XJpyHDo2dRkSkSlOWpFo9D2mCDh1g4kR4/HF4773YaUREqjR2pHASWn3UooqKwiqk2bNhypTYaUREAq0+imTAAPjKV8IpJE04i0im0OqjiIqL4Y03YMmS2ElERAKtPopo/Hjo3FlbaotI5tDqo4gOPBAuvhimT4f//m849NDYiUQk32n1UWTFxfDZZ/Dgg7GTiIho9VF0xx0HgweHU0jXXQemihWRiLT6KAMUF8Prr8PSpbGTiEi+0+qjDDBhAnTsqAlnEYlPq48yQMeOcNFF8MgjsHlz7DQiks+0+ihDFBeHkcJDD8G118ZOIyL5SquPMsQJJ8CgQfA//6MrnEUkHq0+yiDFxXDNNbBsGZx4Yuw0IpKPtPoog1x0Ubig7YEHYicRkXyl1UcZpFOnsBJpzhzYujV2GhHJR4mtPjKzGWa2ycxeq+0LWnCfma02s1fN7Pj9+YfkiuJi2LYtFIOISLolufpoJvBTYHYdf+ccoF/qcRJwf+rPvLZ4MXzuc2ElUnFxeK+0NMwz3Hhj1GgikgcSW33k7r8HPqjn650LzPZgKdDFzHo0IU9OOvFE2LQJli+HFStCIYwfH7bCEBFJWszVR4cDa6u9Xpd6b2PNA82sGCgGOOKII5r4bbLL0KHhWoUxY8LE8/vvQ0mJ7uUsIumRFauP3H2quxe6e2FBQUGS3yojfO1rcMYZ4QY8/fqpEEQkfWKuPloP9K72ulfqvbxXWgorV0JhIbz4InzrW7ETiUi+iLn30TxgYmoV0hBgi7vvc+oo31TMIZSUhF1TTzkFfvYzuPXW2MlEJB+0xOojo5bVR2Y2Bzgd6GZm64BbgbYA7v4LYAEwElgNbAcub0rwXLVs2d5zCM89FyaZ77wThg2D006Lm09Ecpt5IzbaMbMFNDDR7O5jWzJYXQoLC72srCwd3ypjfPABnHwybNwIS5bAgAGxE4lItjGz5e5e2NBxWTHRnO8OPRSeeSZsgXHOObBuXexEIpKrtM1FljjySFi4ELZsCcWg+y6ISBJ0k50sctxx8MQTYanq2LHw2WexE4lIrmnqRHNdcwrPtEwcaciwYTBrVriwbeLEsEdSq6Zcly4iUo9GlYK7/yjpINJ4F14IGzbA974HPXrAPfeA6VZHItICGjtSkAwzZUqYcL73XujdG7773diJRCQXqBSylBn8+MdVI4aePcMIQkRkf6gUslirVmF+4d13YdIk6N49zDmIiDSXpiizXPv2YUXS5z8P550X9kwSEWkulUIO6NIlXNzWqVO4huHtt2MnEpFspVLIEb16hWL45JNQDB/Ud3sjEZE6qBRyyJe+BE8+CW++GW7S88knsROJSLZRKeSYU0+FBx+EP/4RLr4Ydu+OnUhEsolKIQddcEG4fuE3v4Hrr4dGbIQrIgJoSWrOuv76cHHbf/xHuLjtBz+InUhEsoFKIYfddResXw833RQubps4MXYiEcl0KoUc1qoV/PKX4eK2K6+Eww6Ds86KnUpEMpnmFHJcu3bw+ONhZdK4cbBiRexEIpLJVAp5oFMnWLAAunaFkSNhzZrYiUQkU6kU8kTPnuHitp07YcQIeO+92IlEJBOpFPJI//4wbx6sXQujR8P27bETiUimUSnkmZNPDndrW7YMJkyAXbtiJxKRTKJSyENjx8JPfwrz58O11+riNhGpoiWpeeqaa8I1DHfeGS5uu/nm2IlEJBOoFPLYHXeEq55vuQUOPxyuuCJ2IhGJTaWQx8zggQfgH/+A4uJw57ZRo2KnEpGYNKeQ59q2hblzYeBAGD8eXn45diIRiUmlIHTsCE8/XTVSWL06diIRiUWlIEAohGefDc/PPjvslyQi+UelIJX69YOnngpzDKNHw8cfx04kIummUpC9nHQSlJTAn/4U5hh27oydSETSSaUg+xg1Cn7xC1i4EK66She3ieQTLUmVWk2eHC5uu+026NULbr89diIRSQeVgtTpllvCxW133BEubrvqqtiJRCRpKgWpkxncfz9s3Bj2SDrsMDj33NipRCRJmlOQerVpA488AoWFYVfVF1+MnUhEkqRSkAYddFBYqtq7d1iq+sYbsROJSFJUCtIoBQXhzm1t2oQ7t23cGDuRiCQh0VIwsxFm9oaZrTazH9Ty+WVmVm5mr6Qek5PMI/vnc58L93ouLw/3ev7oo9iJRKSlJVYKZtYa+BlwDnAMcKGZHVPLoY+4+8DUY1pSeaRlnHBC2EDvtddg3DjYsSN2IhFpSUmOFE4EVrv7GnffATwMaO1KDhgxAqZNgxdegCuv1MVtIrkkyVI4HFhb7fW61Hs1jTOzV81srpn1TjCPtKBJk8LGeQ8+CDfdVPV+aSncfXe8XCKyf2JPNM8H+rj7l4HngVm1HWRmxWZWZmZl5eXlaQ0odbvxRmjfHv793+G++0IhjB8PgwfHTiYizZVkKawHqv/m3yv1XiV3f9/dP0u9nAacUNsXcvep7l7o7oUFBQWJhJWmGzYM5s+Hdu3g29+G4cPh/POhf//YyUSkuZIshWVAPzM7yszaAROAedUPMLMe1V6OAVYlmEcScOaZ8N3vhufdu4eN9Hr1CvMODz0E27fHzSciTZNYKbj7LuBbwLOEH/Yl7v66md1uZmNSh11vZq+b2UrgeuCypPJIMkpLw32eb745rESaOTPMMaxaBRdfHIri8svDcXv2xE4rIg0xz7KlI4WFhV5WVhY7hlA1h1BSAkOH7v36tNPgD3+A2bPh0Udh69ZwRfQll8Cll8IXvxg7vUh+MbPl7l7Y0HGxJ5oliy1bVlUIEP4sKQnvt2oVimH69HAntzlzYMCAsDLpmGPCZPRPfhIuhBORzKGRgqRVRUHMng2vvBK2zTjnHJg4Meyr1L597IQiuUkjBclIhx0GN9wQbvf56qvh+fLlcMEF4bOrroIlS3RBnEgsKgWJ5thjw+mkd96B556DMWPCxXBf/SocfXS469ubb8ZOKZJfVAoSXevW4RqH2bPh3Xdh1qyw+d7tt4dyOPnksNT1gw9iJxXJfSoFySgdO4b5heefDyOIu+6CzZvhmmugR4+wCd+TT2ojPpGkqBQkY/XqBf/yL2FH1uXLwy1BlyyBsWOhZ0/41rfg5Zc1/yDSklQKkvHM4Pjj4Z57YN26cBe4M88MO7WedFK45uHOO+Htt2MnFcl+KgXJKm3bwqhR8PDDYf5h2rRw1fQPfwh9+sDpp8OMGboBkEhzqRQka3XuHO7n8LvfwVtvwR13wIYN4b3u3eHCC2HhQti1Kxx/993hquvqtNW3yN5UCpIT+vQJo4U33oClS+GKK8Iy15Ejw9zElCnQpUvYhqOiGLTVt8i+dEWz5KwdO8I9pWfPDvMQO3eG8igvD6OJhx7ae5sOkVymK5ol77VrF1YqPf44bNwIP/95uGp627ZwU6BWrcLS1z/+EXbvjp1WJDNopCB5pbQ0XOtwwglhLmL37rCld7du4VTT6NFw1llhvkIkl2ikIFJDxRzCY4+FEcKzz8Ihh4S5iLPPDneRGz8+FMSZZ8K998Lq1bFTi6SXSkHyRm1bfT/6KBx8cNhzadOmcA+IKVPC6aYbboB+/cLtRb///TCyqFjJJJKrdPpIpA5r1oQJ6qeegsWLw0R1ly5hq+/Ro8MtRw89NHZKkcZp7OkjlYJII2zdGk45zZ8PTz8dVjC1bh026xs9Ojz69w9XX4tkIpWCSEL27AmnoubPD6OIlSvD+337VhXEqaeG1U8imUKlIJIma9dWnWb67W/hs8/CPMXZZ4eCGDkSCgpip5R8p1IQiWDbNli0qGoUsXFjOKU0ZEjVKOLYY3WaSdJPpSASmXu47WhFQVT83/aII6oKYuhQ3Zda0kPXKYhEVrHl9623hjmIDRvCrq6DBsHMmeG0Uteu4arradPCqKKCNu+TWFQKImnSo0fYc+mJJ+D998MOrpddFkYTRUXhxkGDB8OPfhSuqNbmfRKDTh+JROYe7i5XcZpp6dLwXteuYY5i9OgwgT1nTpi8FmkOzSmIZKny8jCKmD8f5s2ruh+1GfTuDUcfHa60PvroqkffvtChQ9zcktkaWwpt0hFGRBqvoAAmTgwFsHgxjBkTtuP4+tfDBn6rV8PcueEUVHW9elWVRPXS6NsXDjooyj9FspBKQSQDVcwhVOzVdMkle78G+PBDePPNUBJ/+1v4c/VqePLJMNqormfPvUcWFaXRt2+4pkKkgkpBJAPVtnlfSUl4v+K9Qw6BwsLwqGnLltoLY8EC+Mc/9j62e/d9T0dVvO7UKdl/p2QezSmI5JmtW6sKo2ZpbNiw97EFBbXPYfTrFzYHrHD33WFlVPW72JWWhhK78cb0/LukfppTEJFaHXwwDBwYHjVt21Z7YSxaFG5rWl3XrlUl0bo1/Ou/wl13wahR8Oqr4T7ZJSXp+TdJy9FIQUQa5ZNP9i6M6qWxdm1YRltT585hRFHxaMrrzp2hTQK/tubrqEYjBRFpUR06wIAB4VHTp5/CW2/BbbeF0cHw4WG/p82bw2PLlvDn3/9e9XrLloa/Z8eOTS+W6u8dcMC+X3Pw4L0n7atP6otKQURaQPv2YQJ70SK4+Wa4/3646aa9fxuvaffuML9RvTSqP2q+t2VL2Apk1aqq17t3N5yrtuIYMiSc5jrppDBCKC6GdevCrVo7dIADD6x6VH/doQO0bZveDQ3TPbJRKYjIfqu5hHbo0H2X0NbUunXVD+nmcA9zIPWVSM2i+fDDMKLZvDlscb54cfha99zT+O/buvW+ZVFbedT2vCnHtW8fyifdIxuVgojst8YsoW1pZuH0UseO4cK9pqj4wVpUBFOnhpHNoEGwfXuYO9m+vepR/XVDzz/8ENav3/eziqvSm6qiKMzCKblhw8JeWfWV7f7SRLOI5JWao5qar5Owa1coh+YUTsXrl16Cv/wlnJ67/famZ9BEs4hILWKMatq0CUuBm3v1eGlp2AurYr6m4hRdEjRSEBHJYC01ssmIm+yY2Qgze8PMVpvZD2r5/AAzeyT1+Utm1ifJPCIi2aa+kU0SEhspmFlr4K/AcGAdsAy40N3/Uu2Ya4Evu/vVZjYBOM/dv1Hf19VIQUSk6TJhpHAisNrd17j7DuBh4Nwax5wLzEo9nwucYaZbmouIxJJkKRwOrK32el3qvVqPcfddwBaga80vZGbFZlZmZmXlNfcEFhGRFpMV92h296nuXujuhQUFBbHjiIjkrCRLYT3Qu9rrXqn3aj3GzNoAnYEa95MSEZF0SbIUlgH9zOwoM2sHTADm1ThmHjAp9fx8YJFn2xpZEZEckuh1CmY2ErgXaA3McPc7zex2oMzd55lZe+BXwCDgA2CCu69p4GuWA283M1I34L1m/t0YsilvNmWF7MqbTVkhu/JmU1bYv7xHunuD59+z7uK1/WFmZY1ZkpUpsilvNmWF7MqbTVkhu/JmU1ZIT96smGgWEZH0UCmIiEilfCuFqbEDNFE25c2mrJBdebMpK2RX3mzKCmnIm1dzCiIiUr98GymIiEg9VAoiIlIpL0rBzGaY2SYzey12loaYWW8zKzWzv5jZ62b27diZ6mNm7c3sZTNbmcr7o9iZGmJmrc3sT2b2VOwsDTGzv5vZn83sFTPL6O2BzayLmc01s/8zs1Vm9pXYmepiZl9I/W9a8fjIzL4TO1ddzOyG1H9fr5nZnNQ1Xsl8r3yYUzCzU4GPgdnuPiB2nvqYWQ+gh7uvMLODgeXA2OpbjmeS1K62B7n7x2bWFlgCfNvdl0aOViczmwIUAp3cfXTsPPUxs78Dhe6e8RdYmdks4A/uPi21i8GB7r45dq6GpLb5Xw+c5O7NvTA2MWZ2OOG/q2Pc/RMzKwEWuPvMJL5fXowU3P33hCumM567b3T3FannW4FV7Lu7bMbw4OPUy7apR8b+pmFmvYBRwLTYWXKJmXUGTgWmA7j7jmwohJQzgDczsRCqaQN0SO0RdyCwIalvlBelkK1Sd6IbBLwUN0n9UqdjXgE2Ac+7eybnvRe4EdgTO0gjOfCcmS03s+LYYepxFFAO/DJ1am6amR0UO1QjTQDmxA5RF3dfD/wn8A6wEdji7s8l9f1UChnKzDoCjwHfcfePYuepj7vvdveBhJ1wTzSzjDxFZ2ajgU3uvjx2liY4xd2PB84Bvpk6FZqJ2gDHA/e7+yBgG7DPLXgzTeo01xjg0dhZ6mJmhxBuSHYU0BM4yMwuSer7qRQyUOrc/GPAr9398dh5Git1uqAUGBE7Sx1OBsakztM/DAwzswfjRqpf6rdE3H0T8BvCHQ0z0TpgXbVR4lxCSWS6c4AV7v5u7CD1OBN4y93L3X0n8Djwz0l9M5VChklN3E4HVrn7f8XO0xAzKzCzLqnnHQj35P6/uKlq5+43uXsvd+9DOGWwyN0T+41rf5nZQanFBqROxZwFZOQKOnf/B7DWzL6QeusMICMXR9RwIRl86ijlHWCImR2Y+vlwBmGuMRF5UQpmNgd4EfiCma0zsytjZ6rHycClhN9iK5bLjYwdqh49gFIze5VwD43n3T3jl3pmie7AEjNbCbwMPO3uz0TOVJ/rgF+n/r8wEPi3yHnqlSra4YTfvDNWavQ1F1gB/Jnwczux7S7yYkmqiIg0Tl6MFEREpHFUCiIiUkmlICIilVQKIiJSSaUgIiKVVAoiLcDM+mTDLrwiDVEpiIhIJZWCSAszs8+lNoUbHDuLSFO1iR1AJJektnl4GLjM3VfGziPSVCoFkZZTADwJfD1Tb4ok0hCdPhJpOVsIm5edEjuISHNppCDScnYA5wHPmtnH7v5Q7EAiTaVSEGlB7r4tdTOf51PFMC92JpGm0C6pIiJSSXMKIiJSSaUgIiKVVAoiIlJJpSAiIpVUCiIiUkmlICIilVQKIiJS6f8BI1rqRt4LkooAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "show_elbow(df_user[['F值']]) #显示F值聚类K值手肘图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 创建和训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.cluster import KMeans #导入KMeans模块\n",
    "kmeans_R = KMeans(n_clusters=3) #设定K=3\n",
    "kmeans_F = KMeans(n_clusters=4) #设定K=4\n",
    "kmeans_M = KMeans(n_clusters=4) #设定K=4"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,\n",
       "    n_clusters=4, n_init=10, n_jobs=1, precompute_distances='auto',\n",
       "    random_state=None, tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "kmeans_R.fit(df_user[['R值']]) #拟合模型\n",
    "kmeans_F.fit(df_user[['F值']]) #拟合模型\n",
    "kmeans_M.fit(df_user[['M值']]) #拟合模型"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 给R值聚类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "      <th>M值</th>\n",
       "      <th>R值层级</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>498.95</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "      <td>52.00</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "      <td>1201.51</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "      <td>628.38</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "      <td>5579.10</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值       M值  R值层级\n",
       "0  14681   70    7   498.95     1\n",
       "1  14682  187    2    52.00     2\n",
       "2  14684   25  390  1201.51     1\n",
       "3  14687  106   15   628.38     2\n",
       "4  14688    7  324  5579.10     1"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user['R值层级'] = kmeans_R.predict(df_user[['R值']]) #通过聚类模型求出R值的层级\n",
    "df_user.head() #显示头几行数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R值层级</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>138.0</td>\n",
       "      <td>298.094203</td>\n",
       "      <td>45.436550</td>\n",
       "      <td>231.0</td>\n",
       "      <td>255.25</td>\n",
       "      <td>292.5</td>\n",
       "      <td>334.50</td>\n",
       "      <td>372.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>664.0</td>\n",
       "      <td>32.088855</td>\n",
       "      <td>25.141763</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.00</td>\n",
       "      <td>25.0</td>\n",
       "      <td>50.00</td>\n",
       "      <td>94.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>178.0</td>\n",
       "      <td>157.162921</td>\n",
       "      <td>37.340870</td>\n",
       "      <td>95.0</td>\n",
       "      <td>126.00</td>\n",
       "      <td>156.5</td>\n",
       "      <td>188.75</td>\n",
       "      <td>225.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      count        mean        std    min     25%    50%     75%    max\n",
       "R值层级                                                                   \n",
       "0     138.0  298.094203  45.436550  231.0  255.25  292.5  334.50  372.0\n",
       "1     664.0   32.088855  25.141763    0.0   10.00   25.0   50.00   94.0\n",
       "2     178.0  157.162921  37.340870   95.0  126.00  156.5  188.75  225.0"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user.groupby('R值层级')['R值'].describe() #R值层级分组统计信息"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 给聚类后的层级排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "#定义一个order_cluster函数为聚类排序\n",
    "def order_cluster(cluster_name, target_name,df,ascending=False):\n",
    "    new_cluster_name = 'new_' + cluster_name #新的聚类名称\n",
    "    df_new = df.groupby(cluster_name)[target_name].mean().reset_index() #按聚类结果分组，创建df_new对象\n",
    "    df_new = df_new.sort_values(by=target_name,ascending=ascending).reset_index(drop=True) #排序\n",
    "    df_new['index'] = df_new.index #创建索引字段\n",
    "    df_new = pd.merge(df,df_new[[cluster_name,'index']], on=cluster_name) #基于聚类名称把df_new还原为df对象，并添加索引字段\n",
    "    df_new = df_new.drop([cluster_name],axis=1) #删除聚类名称\n",
    "    df_new = df_new.rename(columns={\"index\":cluster_name}) #将索引字段重命名为聚类名称字段\n",
    "    return df_new #返回排序后的df_new对象"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "      <th>M值</th>\n",
       "      <th>R值层级</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>498.95</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "      <td>52.00</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "      <td>1201.51</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "      <td>628.38</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "      <td>5579.10</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值       M值  R值层级\n",
       "0  14681   70    7   498.95     2\n",
       "1  14682  187    2    52.00     1\n",
       "2  14684   25  390  1201.51     2\n",
       "3  14687  106   15   628.38     1\n",
       "4  14688    7  324  5579.10     2"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user = order_cluster('R值层级', 'R值', df_user, False) #调用簇排序函数\n",
    "df_user = df_user.sort_values(by='用户码',ascending=True).reset_index(drop=True) #根据用户码排序\n",
    "df_user.head() #显示头几行数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R值层级</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>138.0</td>\n",
       "      <td>298.094203</td>\n",
       "      <td>45.436550</td>\n",
       "      <td>231.0</td>\n",
       "      <td>255.25</td>\n",
       "      <td>292.5</td>\n",
       "      <td>334.50</td>\n",
       "      <td>372.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>178.0</td>\n",
       "      <td>157.162921</td>\n",
       "      <td>37.340870</td>\n",
       "      <td>95.0</td>\n",
       "      <td>126.00</td>\n",
       "      <td>156.5</td>\n",
       "      <td>188.75</td>\n",
       "      <td>225.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>664.0</td>\n",
       "      <td>32.088855</td>\n",
       "      <td>25.141763</td>\n",
       "      <td>0.0</td>\n",
       "      <td>10.00</td>\n",
       "      <td>25.0</td>\n",
       "      <td>50.00</td>\n",
       "      <td>94.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      count        mean        std    min     25%    50%     75%    max\n",
       "R值层级                                                                   \n",
       "0     138.0  298.094203  45.436550  231.0  255.25  292.5  334.50  372.0\n",
       "1     178.0  157.162921  37.340870   95.0  126.00  156.5  188.75  225.0\n",
       "2     664.0   32.088855  25.141763    0.0   10.00   25.0   50.00   94.0"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user.groupby('R值层级')['R值'].describe() #R值层级分组统计信息"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 继续给F、M值聚类，并排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F值层级</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>720.0</td>\n",
       "      <td>32.277778</td>\n",
       "      <td>24.128263</td>\n",
       "      <td>1.0</td>\n",
       "      <td>12.00</td>\n",
       "      <td>27.0</td>\n",
       "      <td>48.25</td>\n",
       "      <td>92.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>203.0</td>\n",
       "      <td>152.960591</td>\n",
       "      <td>50.338738</td>\n",
       "      <td>93.0</td>\n",
       "      <td>113.50</td>\n",
       "      <td>138.0</td>\n",
       "      <td>191.50</td>\n",
       "      <td>279.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>50.0</td>\n",
       "      <td>417.080000</td>\n",
       "      <td>109.618232</td>\n",
       "      <td>289.0</td>\n",
       "      <td>329.75</td>\n",
       "      <td>390.0</td>\n",
       "      <td>492.50</td>\n",
       "      <td>710.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>7.0</td>\n",
       "      <td>1281.000000</td>\n",
       "      <td>515.121345</td>\n",
       "      <td>887.0</td>\n",
       "      <td>996.50</td>\n",
       "      <td>1112.0</td>\n",
       "      <td>1304.50</td>\n",
       "      <td>2366.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      count         mean         std    min     25%     50%      75%     max\n",
       "F值层级                                                                        \n",
       "0     720.0    32.277778   24.128263    1.0   12.00    27.0    48.25    92.0\n",
       "1     203.0   152.960591   50.338738   93.0  113.50   138.0   191.50   279.0\n",
       "2      50.0   417.080000  109.618232  289.0  329.75   390.0   492.50   710.0\n",
       "3       7.0  1281.000000  515.121345  887.0  996.50  1112.0  1304.50  2366.0"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user['F值层级'] = kmeans_F.predict(df_user[['F值']]) #通过聚类模型求出F值的层级\n",
    "df_user = order_cluster('F值层级', 'F值',df_user,True) #调用簇排序函数\n",
    "df_user.groupby('F值层级')['F值'].describe() #F值层级分组统计信息"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "      <th>M值</th>\n",
       "      <th>R值层级</th>\n",
       "      <th>F值层级</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>498.95</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "      <td>52.00</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "      <td>1201.51</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "      <td>628.38</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "      <td>5579.10</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值       M值  R值层级  F值层级\n",
       "0  14681   70    7   498.95     2     0\n",
       "1  14682  187    2    52.00     1     0\n",
       "2  14684   25  390  1201.51     2     2\n",
       "3  14687  106   15   628.38     1     0\n",
       "4  14688    7  324  5579.10     2     2"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user = df_user.sort_values(by='用户码',ascending=True).reset_index(drop=True) #根据用户码排序\n",
    "df_user.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "      <th>M值</th>\n",
       "      <th>R值层级</th>\n",
       "      <th>F值层级</th>\n",
       "      <th>M值层级</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>498.95</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "      <td>52.00</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "      <td>1201.51</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "      <td>628.38</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "      <td>5579.10</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     用户码   R值   F值       M值  R值层级  F值层级  M值层级\n",
       "0  14681   70    7   498.95     2     0     0\n",
       "1  14682  187    2    52.00     1     0     0\n",
       "2  14684   25  390  1201.51     2     2     0\n",
       "3  14687  106   15   628.38     1     0     0\n",
       "4  14688    7  324  5579.10     2     2     1"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user['M值层级'] = kmeans_M.predict(df_user[['M值']]) #通过聚类模型求出M值的层级\n",
    "df_user = order_cluster('M值层级', 'M值',df_user,True) #调用簇排序函数\n",
    "df_user.groupby('M值层级')['M值'].describe() #M值层级分组统计信息\n",
    "df_user = df_user.sort_values(by='用户码',ascending=True).reset_index(drop=True) #根据用户码排序\n",
    "df_user.head() #显示头几行数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 为用户整体分组画像"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_user['总分'] = df_user['R值层级'] + df_user['F值层级'] + df_user['M值层级'] #求出每个用户RFM总分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>R值</th>\n",
       "      <th>F值</th>\n",
       "      <th>M值</th>\n",
       "      <th>R值层级</th>\n",
       "      <th>F值层级</th>\n",
       "      <th>M值层级</th>\n",
       "      <th>总分</th>\n",
       "      <th>总体价值</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14681</td>\n",
       "      <td>70</td>\n",
       "      <td>7</td>\n",
       "      <td>498.95</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>低价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14682</td>\n",
       "      <td>187</td>\n",
       "      <td>2</td>\n",
       "      <td>52.00</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>低价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14684</td>\n",
       "      <td>25</td>\n",
       "      <td>390</td>\n",
       "      <td>1201.51</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>4</td>\n",
       "      <td>中价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14687</td>\n",
       "      <td>106</td>\n",
       "      <td>15</td>\n",
       "      <td>628.38</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>低价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14688</td>\n",
       "      <td>7</td>\n",
       "      <td>324</td>\n",
       "      <td>5579.10</td>\n",
       "      <td>2</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "      <td>高价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>975</th>\n",
       "      <td>16015</td>\n",
       "      <td>3</td>\n",
       "      <td>181</td>\n",
       "      <td>704.55</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>中价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>976</th>\n",
       "      <td>16016</td>\n",
       "      <td>2</td>\n",
       "      <td>224</td>\n",
       "      <td>1465.51</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>3</td>\n",
       "      <td>中价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>977</th>\n",
       "      <td>16017</td>\n",
       "      <td>46</td>\n",
       "      <td>32</td>\n",
       "      <td>211.88</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>低价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>978</th>\n",
       "      <td>16018</td>\n",
       "      <td>38</td>\n",
       "      <td>28</td>\n",
       "      <td>408.90</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>低价值</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>979</th>\n",
       "      <td>16019</td>\n",
       "      <td>46</td>\n",
       "      <td>160</td>\n",
       "      <td>3786.24</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "      <td>中价值</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>980 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       用户码   R值   F值       M值  R值层级  F值层级  M值层级  总分 总体价值\n",
       "0    14681   70    7   498.95     2     0     0   2  低价值\n",
       "1    14682  187    2    52.00     1     0     0   1  低价值\n",
       "2    14684   25  390  1201.51     2     2     0   4  中价值\n",
       "3    14687  106   15   628.38     1     0     0   1  低价值\n",
       "4    14688    7  324  5579.10     2     2     1   5  高价值\n",
       "..     ...  ...  ...      ...   ...   ...   ...  ..  ...\n",
       "975  16015    3  181   704.55     2     1     0   3  中价值\n",
       "976  16016    2  224  1465.51     2     1     0   3  中价值\n",
       "977  16017   46   32   211.88     2     0     0   2  低价值\n",
       "978  16018   38   28   408.90     2     0     0   2  低价值\n",
       "979  16019   46  160  3786.24     2     1     1   4  中价值\n",
       "\n",
       "[980 rows x 9 columns]"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#在df_user对象中添加总体价值这个字段\n",
    "df_user.loc[(df_user['总分']<=2) & (df_user['总分']>=0), '总体价值'] = '低价值' \n",
    "df_user.loc[(df_user['总分']<=4) & (df_user['总分']>=3), '总体价值'] = '中价值' \n",
    "df_user.loc[(df_user['总分']<=8) & (df_user['总分']>=5), '总体价值'] = '高价值'\n",
    "df_user #显示df_user"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x11ebc6390>"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#显示高、中、低价值组分布散点图（F值与M值）\n",
    "plt.scatter(df_user.query(\"总体价值 == '高价值'\")['F值'],\n",
    "                   df_user.query(\"总体价值 == '高价值'\")['M值'],c='g',marker='*')\n",
    "plt.scatter(df_user.query(\"总体价值 == '中价值'\")['F值'],\n",
    "                   df_user.query(\"总体价值 == '中价值'\")['M值'],marker=8)\n",
    "plt.scatter(df_user.query(\"总体价值 == '低价值'\")['F值'],\n",
    "                   df_user.query(\"总体价值 == '低价值'\")['M值'],c='r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
